﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using System.Configuration;
using System.Net.Mail;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Seguridad.Business;
using Crosland.Automotriz.Entidad;
using DevExpress.Web.ASPxEditors;
using Crosland.Automotriz.Seguridad.ControlExeption;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmDescuentos : System.Web.UI.Page
    {
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        const string script = "MostrarAlerta();";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false) 
            {
                ListarOrganizacion();
                if (Request.QueryString["org"] != null) { cboOrganizacion.Value = Request.QueryString["org"]; }
                cboOrganizacion_SelectedIndexChanged(null, null);
                if (Request.QueryString["can"] != null) { cboCanal.Value = Request.QueryString["can"]; }
                if (Request.QueryString["ofi"] != null) { cboOficina.Value = Request.QueryString["ofi"]; }
                ListarTipoDescuento();
                if (Request.QueryString["ofe"] != null) { cboTipoDescuento.Value = Request.QueryString["ofe"]; }
                ListarEstados();
                if (Request.QueryString["est"] != null) { cboEstado.Value = Request.QueryString["est"]; }
                if (Request.QueryString["act"] != null) { chkActivas.Checked = bool.Parse(Request.QueryString["act"]); }
                ListarEmails();

                if (Session["indexFocus"] != null) {
                    gvListado.FocusedRowIndex = Convert.ToInt32(Session["indexFocus"]);
                
                }

                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
            }
            Listar();
        }
        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "GuardarExceptionLog");
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
        void ListarOrganizacion()
        {
            clsTd_Org_VtaLogic oOrg = new clsTd_Org_VtaLogic();
            cboOrganizacion.DataSource = oOrg.lista();
            cboOrganizacion.TextField = "DES_ORG_VTA";
            cboOrganizacion.ValueField = "ID_ORG_VTA";
            cboOrganizacion.DataBind();
            cboOrganizacion.Value = "2";
        }

        void ListarCanal()
        {
            int ID_ORG_VTA = int.Parse(cboOrganizacion.SelectedItem.Value.ToString());
            clsTd_Canal_DistribLogic oCanal = new clsTd_Canal_DistribLogic();
      
            cboCanal.DataSource = oCanal.ListarCanalxOrganizacion(ID_ORG_VTA);
            cboCanal.TextField = "DES_CANAL_DISTRIB";
            cboCanal.ValueField = "ID_CANAL_DISTRIB";
            cboCanal.DataBind();
            ListEditItem lista = new ListEditItem();
            lista.Text = "TODOS";
            lista.Value = "99999";
            cboCanal.Items.Add(lista);
            cboCanal.Value = "99999";

        }

        void ListarOficina()
        {
            try
            {
                int ID_ORG_VTA = int.Parse(cboOrganizacion.SelectedItem.Value.ToString());
                clsTd_Org_Vta_Ofi_Vta_Canal_SectorLogic bl = new clsTd_Org_Vta_Ofi_Vta_Canal_SectorLogic();
                cboOficina.DataSource = bl.listaOficinaVenta(ID_ORG_VTA);
                cboOficina.TextField = "DES_OFI_VTA";
                cboOficina.ValueField = "ID_OFI_VTA";
                cboOficina.DataBind();
                cboOficina.SelectedIndex = 0;
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "ListarOficina");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "ListarOficina");
            }
        }

        void ListarTipoDescuento()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboTipoDescuento.DataSource = bl.Listar("T_VEN_TIPO_DESCUENTO", 2);
            cboTipoDescuento.TextField = "DES_LARGA";
            cboTipoDescuento.ValueField = "ID_GENERAL_DET";
            cboTipoDescuento.DataBind();
            cboTipoDescuento.SelectedIndex = 0;
        }

        void ListarEstados()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboEstado.DataSource = bl.Listar("T_EST_SEG_VEH", 11);
            cboEstado.TextField = "DES_LARGA";
            cboEstado.ValueField = "DES_LARGA";
            cboEstado.DataBind();
            ListEditItem lista = new ListEditItem();
            lista.Text = "TODOS";
            lista.Value = "%";
            cboEstado.Items.Add(lista);
            cboEstado.Value = "%";
        }

        void Listar() 
        {
            try
            {
                clsT_VEN_OFERTA_CABBL ovdc = new clsT_VEN_OFERTA_CABBL();
                int ID_ORG_VTA = int.Parse(cboOrganizacion.Value.ToString());
                int ID_OFI_VTA = int.Parse(cboOficina.Value.ToString());
                int ID_CANAL = int.Parse(cboCanal.Value.ToString());
                int ID_TIPO_OFERTA = int.Parse(cboTipoDescuento.Value.ToString());
                string DES_LARGA = cboEstado.Value.ToString();
                bool activo = chkActivas.Checked;
                gvListado.DataSource = ovdc.Listar(ID_ORG_VTA, ID_OFI_VTA, ID_CANAL, ID_TIPO_OFERTA, DES_LARGA, activo);
                gvListado.DataBind();
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "Listar");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "Listar");
            }
        }

        void ListarEmails()
        {
            clsT_Mae_Tabla_General_DetBL bl = new clsT_Mae_Tabla_General_DetBL();
            cboUsuarios.DataSource = bl.Listar("T_MAE_OFERTA_EMAIL", 2);
            cboUsuarios.TextField = "DES_LARGA";
            cboUsuarios.ValueField = "ID_GENERAL_DET";
            cboUsuarios.DataBind();
            cboUsuarios.SelectedIndex = 0;
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            Listar();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Session["indexFocus"] = null; 
            Response.Redirect("wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            string ID_ORG_VTA = cboOrganizacion.Value.ToString();
            string ID_CANAL_DISTRIB = cboCanal.Value.ToString();
            string ID_OFI_VTA = cboOficina.Value.ToString();
            string ID_ESTADO = cboEstado.Value.ToString();
            string ID_TIPO_OFERTA = cboTipoDescuento.Value.ToString();
            string IND_ACTIVO = chkActivas.Checked.ToString();

            Response.Redirect("wFrmDescuentosActualizar.aspx?id=" + idNegocio + "&or=0" + "&p=A&org=" + ID_ORG_VTA
                    + "&can=" + ID_CANAL_DISTRIB + "&ofi=" + ID_OFI_VTA + "&est=" + ID_ESTADO + "&ofe=" + ID_TIPO_OFERTA + "&act=" + IND_ACTIVO);
        }

        protected void cboOrganizacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            ListarCanal();
            ListarOficina();
        }

        protected void btnEnviarSolicitud_Click(object sender, EventArgs e)
        {
            int indice = gvListado.FocusedRowIndex;
            if (indice >= 0)
            {
                int ID_VEN_OFERTA_CAB = int.Parse(gvListado.GetRowValues(indice, "ID_VEN_OFERTA_CAB").ToString());

                clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
                T_VEN_OFERTA_CAB_COMPLETO eVOC = new T_VEN_OFERTA_CAB_COMPLETO();
                eVOC = oVOC.SeleccionarCompleto(ID_VEN_OFERTA_CAB);
                string Estado = eVOC.ESTADO;
                bool Activo = eVOC.IND_ACTIVO;

                if (Activo == false)
                {
                    lblMensaje.Text = "Solo puede seleccionar las ofertas ACTIVAS.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    return;
                }
                if (Estado == "PENDIENTE DE APROBAR" || Estado == "APROBADO")
                {
                    lblMensaje.Text = "Solo puede seleccionar las ofertas EN PROCESO";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    return;
                }

                pcSolicitud.ShowOnPageLoad = true;
            }
            else
            {
                lblMensaje.Text = "Debe seleccionar una oferta";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            int indice = gvListado.FocusedRowIndex;
            if (indice >= 0)
            {
                int ID_VEN_OFERTA_CAB = int.Parse(gvListado.GetRowValues(indice, "ID_VEN_OFERTA_CAB").ToString());

                clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
                T_VEN_OFERTA_CAB_COMPLETO eVOC = new T_VEN_OFERTA_CAB_COMPLETO();
                eVOC = oVOC.SeleccionarCompleto(ID_VEN_OFERTA_CAB);
                string Estado = eVOC.ESTADO;
                bool Activo = eVOC.IND_ACTIVO;

                string ID_ORG_VTA = cboOrganizacion.Value.ToString();
                string ID_CANAL_DISTRIB = cboCanal.Value.ToString();
                string ID_OFI_VTA = cboOficina.Value.ToString();
                string ID_ESTADO = cboEstado.Value.ToString();
                string ID_TIPO_OFERTA = cboTipoDescuento.Value.ToString();
                string IND_ACTIVO = chkActivas.Checked.ToString();
                Session["indexFocus"] = gvListado.FocusedRowIndex;
                if (Estado == "APROBADO" || Estado == "PENDIENTE DE APROBAR")
                {
                    Response.Redirect("wFrmDescuentosActualizar.aspx?idvoc=" + ID_VEN_OFERTA_CAB + "&id=" + idNegocio + "&or=1" + "&p=A&org=" + ID_ORG_VTA
                    + "&can=" + ID_CANAL_DISTRIB + "&ofi=" + ID_OFI_VTA + "&est=" + ID_ESTADO + "&ofe=" + ID_TIPO_OFERTA + "&act=" + IND_ACTIVO);
                }
                else 
                {
                    Response.Redirect("wFrmDescuentosActualizar.aspx?idvoc=" + ID_VEN_OFERTA_CAB + "&id=" + idNegocio + "&or=0" + "&p=A&org=" + ID_ORG_VTA
                    + "&can=" + ID_CANAL_DISTRIB + "&ofi=" + ID_OFI_VTA + "&est=" + ID_ESTADO + "&ofe=" + ID_TIPO_OFERTA + "&act=" + IND_ACTIVO);
                }
            }
        }

        protected void btnAnular_Click(object sender, EventArgs e)
        {
            try
            {
                bool resultado = false;
                int indice = gvListado.FocusedRowIndex;
                if (indice >= 0)
                {
                    clsT_VEN_OFERTA_CABBL ovdc = new clsT_VEN_OFERTA_CABBL();
                    int ID_VEN_OFERTA_CAB = int.Parse(gvListado.GetRowValues(indice, "ID_VEN_OFERTA_CAB").ToString());
                    resultado = ovdc.Anular(ID_VEN_OFERTA_CAB);

                    if (resultado == true)
                    {
                        Listar();
                        lblMensaje.Text = "Oferta anulada correctamente.";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    }
                    else
                    {
                        lblMensaje.Text = "Ocurrió un error al anular.";
                        ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                    }
                }
                else 
                {
                    lblMensaje.Text = "Debe seleccionar una oferta.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }

        }

        protected void btnGrabarSolicitud_Click(object sender, EventArgs e)
        {
            try
            {
                int indice = gvListado.FocusedRowIndex;
                if (indice >= 0)
                {
                    int resultado = 0;
                    int ID_VEN_OFERTA_CAB = int.Parse(gvListado.GetRowValues(indice, "ID_VEN_OFERTA_CAB").ToString());

                    clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
                    resultado = oVOC.ActualizarPendienteDeAprobar(ID_VEN_OFERTA_CAB, Session["User"].ToString());

                    EnvioCorreo();

                    Listar();
                    pcSolicitud.ShowOnPageLoad = false;

                    lblMensaje.Text = "Solicitud enviada satisfactoriamente.";
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
                }
            }
            catch (Exception ex)
            {
                lblMensaje.Text = ex.Message;
                ScriptManager.RegisterStartupScript(this, typeof(Page), "x", script, true);
            }
        }

        void EnvioCorreo()
        {
            try
            {
                int indice = gvListado.FocusedRowIndex;
                int ID_VEN_OFERTA_CAB = int.Parse(gvListado.GetRowValues(indice, "ID_VEN_OFERTA_CAB").ToString());

                clsT_VEN_OFERTA_CABBL oVOC = new clsT_VEN_OFERTA_CABBL();
                T_VEN_OFERTA_CAB_COMPLETO eVOC = new T_VEN_OFERTA_CAB_COMPLETO();
                eVOC = oVOC.SeleccionarCompleto(ID_VEN_OFERTA_CAB);

                string ID_USUARIO_REGISTRO = eVOC.ID_USUARIO_REGISTRO;
                List<T_SEG_USUARIO> listaUsuario = new List<T_SEG_USUARIO>();
                clsUsuarioLogic usubl = new clsUsuarioLogic();
                listaUsuario = usubl.listarUser(ID_USUARIO_REGISTRO);
                string NombreUsuarioSolicitante = listaUsuario[0].DES_NOMBRE + ", " + listaUsuario[0].DES_APELLIDOS;

                string body = "";
                body = body + "<table style='font-family:Arial; font-size:12px;'>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Organización de Venta:</td>";
                body = body + "<td>" + eVOC.DES_ORG_VTA + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Oficina de Venta:</td>";
                body = body + "<td>" + eVOC.DES_OFI_VTA + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Canal de Distribución:</td>";
                body = body + "<td>" + eVOC.DES_CANAL_DISTRIB + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Tipo de Descuento:</td>";
                body = body + "<td>" + eVOC.TIPO_DESCUENTO + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Fecha Inicio de Oferta:</td>";
                body = body + "<td>" + eVOC.FEC_INICIO.ToShortDateString() + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Fecha Final de Oferta:</td>";
                body = body + "<td>" + eVOC.FEC_FIN.ToShortDateString() + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Usuario que solicita:</td>";
                body = body + "<td>" + NombreUsuarioSolicitante + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Fecha de solicitud:</td>";
                body = body + "<td>" + eVOC.FEC_REGISTRO + "</td>";
                body = body + "</tr>";

                body = body + "<tr>";
                body = body + "<td style='font-weight:bold'>Estado:</td>";
                body = body + "<td>" + eVOC.ESTADO + "</td>";
                body = body + "</tr>";

                body = body + "</table>";

                body = body + "<br /><br />";
                body = body + "<strong>OBSERVACIONES:</strong> " + txtObservacion.Text.ToUpper().Trim();
                body = body + "<br /><br />";
                body = body + "<a href='http://automotriz.crosland.com.pe'>Ir a la Intranet</a>";

                MailMessage mail = new MailMessage();

                mail.From = new MailAddress(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["UserNameSMTP"]);
                mail.Subject = ("Solicitud de Aprobación de Oferta de Repuestos N°: " + ID_VEN_OFERTA_CAB.ToString());
                mail.Body = body;
                mail.IsBodyHtml = true;
                mail.To.Add(cboUsuarios.Text);
                if (txtCC.Text.Trim() != "")
                {
                    mail.CC.Add(txtCC.Text.Trim());
                }
                SmtpClient s = new SmtpClient();
                s.Host = ConfigurationManager.AppSettings["EmailServer"];
                s.Port = 25;
                s.EnableSsl = false;
                s.UseDefaultCredentials = false;
                s.Credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["MailFrom"], ConfigurationManager.AppSettings["PasswordSMTP"]);
                s.Send(mail);

            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "EnvioCorreo");
                
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "EnvioCorreo");
            }
        }


    }
}